<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>对象扩展运算符</title>
  </head>
  <body>
    <p>对象解构，将所有的键和值复制到新的对象上</p>
    <pre>
    let {x,y,...z} = {x:1,y:2,a:3,b:4}
    x // 1
    y // 2
    z // {a:3,b:4}
    let {x,...y,z} = obj;  // 报错 解构赋值必须是最后一个参数
  </pre
    >
    <p>
      解构赋值的复制是浅复制，所以，如果键是复杂类型的（对象，数组，函数），那么复制的只是一个引用，另外，只复制自有属性
    </p>
    <pre>
          let obj = {a:{b:1}}
          let {...o} = obj;
          obj.a.b =2
          o.a.b       // 2   因为是引用，所以指向的是同一个键值（而不是一个独立的副本）
      </pre
    >
  </body>
</html>
<script>
  let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
  console.log(z);
  let obj = { a: { b: 1 } };
  let { ...o } = obj;
  obj.a.b = 2;
  console.log(o.a.b); //2 因为是引用，所以指向的是同一个键值
</script>
